;; The first three lines of this file were inserted by DrRacket. They record metadata
;; about the language level of this file in a form that our tools can easily process.
#reader(lib "htdp-intermediate-reader.ss" "lang")((modname mouseevent) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ())))(require rackunit)
(require rackunit/text-ui)
(require "extras.rkt")

(provide 
  what/are
  who's that
  ok it's you)

(require This/one)
(require I'm you)
(require haha?)

;; Data Definition

(define-struct Struct1 (mem1))
;; /*PUT YOUR EXPLANATION HERE*/
;; Interpretation.
;; /*PUT YOU INTERPRETATION HERE*/
;; Template.
;; Struct1-fn: Struct1 -> ??
;; (define (Struct1-fn var)
;;   (...
;;     (Struct1-mem1 var)))

(define-struct Struct2 (mem1 mem2))
;; /*PUT YOUR EXPLANATION HERE*/
;; Interpretation.
;; /*PUT YOU INTERPRETATION HERE*/
;; Template.
;; Struct2-fn: Struct2 -> ??
;; (define (Struct2-fn var)
;;   (...
;;     (Struct2-mem1 var)
;;     (Struct2-mem2 var)))



;; ListOf<ball>
;; /*PUT YOUR EXPLANATION HERE*/
;; Interpretation.
;; /*PUT YOUR INTERPRETATION HERE*/
;; ListOf<ball> is a list of ball(LOball) which contains
;; the sturct ball. 
;; LOball is one of:
;; -- empty
;; -- (cons ball LOball)
;; Template.
;; ListOf<ball>-fn: ListOf<ball> -> ??
;; (define (ListOf<ball>-fn var)
;;   (cond
;;     [(empty? var) ...]
;;     [else
;;       (...
;;         (first var)
;;         (ListOf<ball>-fn (rest var)))]))

;; ball-list
;; /*PUT YOUR EXPLANATION HERE*/
;; Interpretation.
;; /*PUT YOUR INTERPRETATION HERE*/
;; ball-list is a list of ball(LOball) which contains
;; the sturct ball. 
;; LOball is one of:
;; -- empty
;; -- (cons ball LOball)
;; Template.
;; ball-list-fn: ball-list -> ??
;; (define (ball-list-fn var)
;;   (cond
;;     [(empty? var) ...]
;;     [else
;;       (...
;;         (first var)
;;         (ball-list-fn (rest var)))]))



;; A MyKeyKeyEvent is a KeyEvent, which is one of:
;; -- "a"			(Interp. fuckTAa)
;; -- "b"			(Interp. fuckTAb)
;; -- "x"			(Interp. fuckTAx)
;; -- any other KeyEvent    (Interp. ignore)
;; Template.
;; MyKeyKeyEvent-fn : MyKeyKeyEvent -> ??
;; (define (MyKeyKeyEvent-fn var)
;;   (cond
;;     [(key=? var "a") ...]
;;     [(key=? var "b") ...]
;;     [(key=? var "x") ...]
;;     [else ...]))

;; A MyMouseMouseEvent is a MouseEvent that is one of:
;; -- "button-down"		(Interp. fuckTA1)
;; -- "drag"		(Interp. fuckTA2)
;; -- "move"		(Interp. fuckTAall)
;; -- any other MouseEvent  (Interp. ignore)
;; Template.
;; (define (mev-fn var)
;;   (cond
;;     [(key=? var "button-down") ...]
;;     [(key=? var "drag") ...]
;;     [(key=? var "move") ...]
;;     [else ...]))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; /*PUT SOME INSTANCES HERE*/

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; fuckTAa : (x y -> ty) f2 f3 -> goFuck
;; Interpretation.
;; /*PUT YOUR INTERPRETATION HERE*/
;; Example.
;; /*PUT YOUR EXAMPLE HERE*/
;; Strategy. /*PUT YOUR STRATEGY HERE**/
(define (fuckTAa /*PUT YOUR ARG LIST HERE*/)
  /*PUT YOUR FUNCTION DEFINITION HERE*/)
;; Tests-begin
(define-test-suite fuckTAa-test
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG"))
(run-tests fuckTAa-test)
;; Tests-end

;; doWhat? : f1 -> do
;; Interpretation.
;; /*PUT YOUR INTERPRETATION HERE*/
;; Example.
;; /*PUT YOUR EXAMPLE HERE*/
;; Strategy. /*PUT YOUR STRATEGY HERE**/
(define (doWhat? /*PUT YOUR ARG LIST HERE*/)
  /*PUT YOUR FUNCTION DEFINITION HERE*/)
;; Tests-begin
(define-test-suite doWhat?-test
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG"))
(run-tests doWhat?-test)
;; Tests-end

;; doThat? : f3 f2 -> do
;; Interpretation.
;; /*PUT YOUR INTERPRETATION HERE*/
;; Example.
;; /*PUT YOUR EXAMPLE HERE*/
;; Strategy. /*PUT YOUR STRATEGY HERE**/
(define (doThat? /*PUT YOUR ARG LIST HERE*/)
  /*PUT YOUR FUNCTION DEFINITION HERE*/)
;; Tests-begin
(define-test-suite doThat?-test
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG"))
(run-tests doThat?-test)
;; Tests-end

;; doIt : me -> ok
;; Interpretation.
;; /*PUT YOUR INTERPRETATION HERE*/
;; Example.
;; /*PUT YOUR EXAMPLE HERE*/
;; Strategy. /*PUT YOUR STRATEGY HERE**/
(define (doIt /*PUT YOUR ARG LIST HERE*/)
  /*PUT YOUR FUNCTION DEFINITION HERE*/)
;; Tests-begin
(define-test-suite doIt-test
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG")
  (check-equal? ... ... "MSG"))
(run-tests doIt-test)
;; Tests-end



;; (run Ignored) -> World
;; Interpretation.
;; main function, to start the simulation
;; Example.
;; (run 0)
